import numpy as np

# 一维数组
a = np.array([1,2,3])
print(a)
print(a.shape)
print(a.dtype)

print("===== 二位数组 ======")
# 二位数组
b = np.array([[1,2,3],[4,5,6]])
print(b)
print(b.shape)
print(b.dtype)

c = np.array([1.1, 2.2, 3.3], dtype=np.float32)
print(c)

print("===== 全零数组 ======")
# 全零数组
zeros = np.zeros((2, 3))  # 2行3列的全0数组
print("2行3列的全0数组:")
print(zeros)
# 全1数组
ones = np.ones((3, 2))   # 3行2列的全1数组
print( "3行2列的全1数组:")
print( ones)


# 单位矩阵 (方阵)
eye = np.eye(3)          # 3x3的单位矩阵
print("3x3的单位矩阵:")
print(eye)

arange = np.arange(0, 10, 2)  # 从0开始到10(不包括)，步长2
print("从0开始到10(不包括)，步长2:") # # 输出: [0 2 4 6 8]
print(arange)

linspace = np.linspace(0, 1, 5)  # 从0到1(包括)，生成5个数
print("从0到1(包括)，生成5个数:")
print(linspace)


# 随机数组 (在[0,1)均匀分布)
rand = np.random.rand(2, 2)  # 2x2的随机数组
print("2x2的随机数组:")
print(rand)

# 随机正态分布数组 (均值0, 标准差1)
randn = np.random.randn(100)  # 100个标准正态分布样本


"""
-----------------   数组的索引和切片   ----------------------------
"""
a = np.array([10, 20, 30, 40, 50])
print(a[1])    # 输出: 20 (索引从0开始)
print(a[1:4]) # 输出: [20 30 40] (切片: [start:stop:step])

print("多维度数组索引和切片")
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(b[0, 1])     # 输出: 2 (第0行, 第1列)
print(b[1:, :2])   # 输出: [[4 5] [7 8]] (第1行到最后行 & 第0列到第1列(不包括第2列))

print("布尔索引")
mask = a > 30
print(mask)        # 输出: [False False False True True]
print(a[mask])     # 输出: [40 50] (只选择a大于30的元素)

# 花式索引 (用索引数组选择元素)
indices = np.array([0, 2, 3])
print(a[indices])  # 输出: [10 30 40]